/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package rpt.bd.cenario;

import java.awt.Image;
import java.awt.Toolkit;
import java.sql.Connection;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import rpt.lib.CLookAndFeel;

/**
 *
 * @author Roberto
 */
public class CGlobal {

    private JFrame fJanelaPrincipal;
    private CConectorBd fConectorBd;
    private CLookAndFeel fLookAndFeel = null;
    private String fDiretorioLocal = null;
    private String fDiretorioRede = null;
    private SimpleDateFormat fFormatadorData = new SimpleDateFormat("dd/MM/yyyy");
    private SimpleDateFormat fFormatadorDataInvertida = new SimpleDateFormat("yyyy/MM/dd");
    private boolean fLogVerboso = false;

    /**
     * 
     * @param aJanelaPrincipal 
     */
    public CGlobal(JFrame aJanelaPrincipal) {
        fJanelaPrincipal = aJanelaPrincipal;
        if (fJanelaPrincipal != null) {
            fLookAndFeel = new CLookAndFeel(fJanelaPrincipal, "Metal");
        }
    }

    /**
     * 
     * @return 
     */
    public boolean isLogVerboso() {
        return fLogVerboso;
    }

    /**
     * 
     * @param fLogVerboso 
     */
    public void setLogVerboso(boolean fLogVerboso) {
        this.fLogVerboso = fLogVerboso;
    }

    public void log(
            final String aNomeClasse,
            final String aMensagem,
            final Throwable aThrown) {
        //
        if (isLogVerboso()) {
            Logger.getLogger(aNomeClasse).log(Level.SEVERE, null, aThrown);
        }
    }

    /**
     * 
     * @param aImageName
     * @return 
     */
    public Image getImagem(final String aImageName) {
        //Icon i = new ImageIcon();
        //swBtnAtualizar.setIcon(i);
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Image image = toolkit.getImage(this.getDirRede() + "/" + aImageName);
        return image;
    }

    /**
     * 
     * @param aImageName
     * @return 
     */
    public Icon getIcon(final String aImageName) {
        Icon i = new ImageIcon(getImagem(aImageName));
        return i;
    }

    /**
     * 
     * @param aConectorBd 
     */
    public void setConectorBd(CConectorBd aConectorBd) {
        fConectorBd = aConectorBd;
    }

    /**
     * 
     * @return 
     */
    public CConectorBd getConectorBd() {
        if (fConectorBd == null) {
            fConectorBd = new CConectorBd(this);
        }
        return fConectorBd;
    }

    /**
     * 
     * @return 
     */
    public Connection getConnection() {
        if (fConectorBd == null) {
            return null;
        } else {
            return fConectorBd.getConnection();
        }
    }

    /**
     * 
     * @return 
     */
    public Statement getStatement() {
        if (fConectorBd == null) {
            return null;
        } else {
            return fConectorBd.getStatement();
        }
    }

    /**
     * 
     * @return 
     */
    public CLookAndFeel getLookAndFeel() {
        return fLookAndFeel;
    }

    /**
     * 
     * @return 
     */
    public JFrame getJanelaPrincipal() {
        return fJanelaPrincipal;
    }

    /**
     * 
     * @return 
     */
    public String getDirLocal() {
        return fDiretorioLocal;
    }

    /**
     * 
     * @return 
     */
    public String getDirRede() {
        return fDiretorioRede;
    }

    /**
     * 
     * @param aDiretorioRede 
     */
    public void setDirRede(String aDiretorioRede) {
        fDiretorioRede = aDiretorioRede;
    }

    /**
     * 
     * @return 
     */
    public SimpleDateFormat getFormatadorData() {
        return fFormatadorData;
    }

    /**
     * 
     * @return 
     */
    public SimpleDateFormat getFormatadorDataInvertida() {
        return fFormatadorDataInvertida;
    }

    /**
     * 
     * @param aData
     * @return 
     */
    public String getDataFormatada(final Date aData) {
        return fFormatadorData.format(aData);
    }

    /**
     * 
     * @param aData
     * @return 
     */
    public String getDataFormatadaInvertida(final Date aData) {
        return fFormatadorDataInvertida.format(aData);
    }

    public int execUpdate(
            final String aSql, final Statement aStatement) {
        int vResultado = 0;
        if (getConectorBd() == null) {
            vResultado = -1;
        } else {
            vResultado = getConectorBd().execUpdate(aSql, null, fLogVerboso, fDiretorioRede);
        }
        return vResultado;
    }
    /**
     * 
     */
}
